home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / include / incl98.zoo / stdio.h < prev    next >
C/C++ Source or Header  |  1993-11-05  |  6KB  |  220 lines

  1. /*
  2.  *
  3.  *    STDIO.H        Standard i/o include file
  4.  *
  5.  */
  6.  
  7. #ifndef _STDIO_H
  8. #define    _STDIO_H
  9.  
  10. #ifndef _COMPILER_H
  11. #include <compiler.h>
  12. #endif
  13.  
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17.  
  18. #ifndef _SIZE_T
  19. #define _SIZE_T __SIZE_TYPEDEF__
  20. typedef _SIZE_T size_t;
  21. #endif
  22.  
  23. /*
  24.  *    CONSTANTS:
  25.  */
  26.  
  27. #ifndef STREAM_MAX
  28. #define STREAM_MAX    _NFILE
  29. #endif
  30.  
  31. #define FOPEN_MAX    _NFILE
  32. #define    FILENAME_MAX    (128)        /* maximum filename size */
  33.  
  34. #ifndef NULL
  35. #define NULL        __NULL
  36. #endif
  37.  
  38. #define    BUFSIZ        ((size_t)1024)    /* default buffer size */
  39.             /* change here must be reflected in crt0.c too */
  40.  
  41. #define    EOF        (-1)        /* end-of-file indicator */
  42. #ifndef __STRICT_ANSI__
  43. # ifndef _POSIX_SOURCE
  44. #define    EOS        '\0'        /* end-of-string indicator */
  45. # endif
  46. #endif
  47.  
  48. #ifndef SEEK_SET
  49. /* lseek() origins */
  50. #define    SEEK_SET    0        /* from beginning of file */
  51. #define    SEEK_CUR    1        /* from current location */
  52. #define    SEEK_END    2        /* from end of file */
  53. #endif
  54.  
  55. /* FILE structure flags */
  56. #define    _IOREAD        0x0001        /* file may be read from */
  57. #define    _IOWRT        0x0002        /* file may be written to */
  58. #define    _IOBIN        0x0004        /* file is in "binary" mode */
  59. #define    _IODEV        0x0008        /* file is a character device */
  60. #define    _IORW        0x0080        /* file is open for update (r+w) */
  61. #define    _IOFBF        0x0100        /* i/o is fully buffered */
  62. #define    _IOLBF        0x0200        /* i/o is line buffered */
  63. #define    _IONBF        0x0400        /* i/o is not buffered */
  64. #define    _IOMYBUF    0x0800        /* standard buffer */
  65. #define    _IOEOF        0x1000        /* EOF has been reached */
  66. #define    _IOERR        0x4000        /* an error has occured */
  67. #define _IOSTRING    0x8000        /* really a string buffer   */
  68.  
  69. typedef    struct            /* FILE structure */
  70.     {
  71.     long        _cnt;        /* # of bytes in buffer */
  72.     unsigned char    *_ptr;        /* current buffer pointer */
  73.     unsigned char    *_base;        /* base of file buffer */
  74.     unsigned int    _flag;        /* file status flags */
  75.     int        _file;        /* file handle */
  76.     long        _bsiz;        /* buffer size */
  77.     unsigned char    _ch;        /* tiny buffer, for "unbuffered" i/o */
  78.     }
  79.     FILE;
  80.  
  81. /* object of type capable of recording uniquely every position in a file */
  82. typedef unsigned long fpos_t;
  83.  
  84. /* lengths of various things */
  85. #define L_ctermid    128
  86. #define    L_tmpnam    128
  87. #ifdef _SYSV_SOURCE
  88. #define L_cuserid    80
  89. #endif /* _SYSV_SOURCE */
  90. #define    TMP_MAX        100
  91.  
  92. extern    FILE    _iob[];
  93.  
  94. /* standard streams */
  95. #define stdin    (&_iob[0])
  96. #define stdout    (&_iob[1])
  97. #define stderr    (&_iob[2])
  98.  
  99. /* stream macros */
  100. #define clearerr(fp)    ((void) ((fp)->_flag &= ~(_IOERR|_IOEOF)))
  101. #define feof(fp)    ((fp)->_flag & _IOEOF)
  102. #define ferror(fp)    ((fp)->_flag & _IOERR)
  103. #define fileno(fp)    ((fp)->_file)
  104.  
  105.  
  106. /* function definitions */
  107.  
  108. __EXTERN char *    ctermid    __PROTO((char *));
  109. #ifdef _SYSV_SOURCE
  110. __EXTERN char *    cuserid __PROTO((char *));
  111. #endif /* _SYSV_SOURCE */
  112.  
  113. __EXTERN int    remove    __PROTO((const char *));
  114. __EXTERN int    rename    __PROTO((const char *, const char *));
  115. __EXTERN char *    tmpnam    __PROTO((char *));
  116. __EXTERN FILE *    tmpfile    __PROTO((void));
  117.  
  118. __EXTERN int    fclose    __PROTO((FILE *));
  119. __EXTERN int    fflush    __PROTO((FILE *));
  120.  
  121. __EXTERN FILE *    fopen    __PROTO((const char *, const char *));
  122. __EXTERN FILE *    freopen    __PROTO((const char *, const char *, FILE *));
  123.  
  124. __EXTERN void    setbuf    __PROTO((FILE *, char *));
  125. __EXTERN int    setvbuf    __PROTO((FILE *, char *, int, size_t));
  126.  
  127. #ifdef __SRC__
  128. __EXTERN int  fscanf  __PROTO((FILE *, const char *, char *));
  129. __EXTERN int  scanf   __PROTO((const char *, char *));
  130. __EXTERN int  sscanf  __PROTO((const char *, const char *, int));
  131. #else /* not __SRC__ */
  132. __EXTERN int  fscanf  __PROTO((FILE *, const char *, ...));
  133. __EXTERN int  scanf   __PROTO((const char *, ...));
  134. __EXTERN int  sscanf  __PROTO((const char *, const char *, ...));
  135. #endif /* not __SRC__ */
  136.  
  137. __EXTERN int    fprintf    __PROTO((FILE *, const char *, ...));
  138. __EXTERN int    printf    __PROTO((const char *, ...));
  139. __EXTERN int    sprintf    __PROTO((char *, const char *, ...));
  140.  
  141. __EXTERN int     vfprintf __PROTO((FILE *, const char *, __VA_LIST__));
  142. __EXTERN int     vprintf     __PROTO((const char *, __VA_LIST__));
  143. __EXTERN int     vsprintf __PROTO((char *, const char *, __VA_LIST__));
  144. #ifndef _POSIX_SOURCE
  145. __EXTERN int    vscanf  __PROTO((const char *, __VA_LIST__));
  146. __EXTERN int    vfscanf __PROTO((FILE *, const char *, __VA_LIST__));
  147. __EXTERN int    vsscanf    __PROTO((const char *, const char *, __VA_LIST__));
  148. #endif /* _POSIX_SOURCE */
  149.  
  150. __EXTERN int    fgetc    __PROTO((FILE *));
  151. __EXTERN char    *fgets    __PROTO((char *, int, FILE *));
  152. __EXTERN char    *gets    __PROTO((char *));
  153. __EXTERN int    fputc    __PROTO((int c, FILE *));
  154. __EXTERN int    fputs    __PROTO((const char *, FILE *));
  155. __EXTERN int    puts    __PROTO((const char *));
  156.  
  157. __EXTERN size_t    fread    __PROTO((void *, size_t, size_t, FILE *));
  158. __EXTERN size_t    fwrite    __PROTO((const void *, size_t, size_t, FILE *));
  159.  
  160. __EXTERN int    fgetpos    __PROTO((FILE *, fpos_t *));
  161. __EXTERN int    fsetpos    __PROTO((FILE *, fpos_t *));
  162.  
  163. __EXTERN int    fseek    __PROTO((FILE *, long, int));
  164. __EXTERN long    ftell    __PROTO((FILE *));
  165. __EXTERN void    rewind    __PROTO((FILE *));
  166.  
  167. __EXTERN void    perror    __PROTO((const char *));
  168.  
  169. #ifndef __STRICT_ANSI__
  170. __EXTERN FILE    *fdopen    __PROTO((int, const char *));
  171.  
  172. # ifndef _POSIX_SOURCE
  173. __EXTERN FILE *    fopenp    __PROTO((const char *, const char *));
  174. __EXTERN int     fungetc    __PROTO((int, FILE *));
  175. __EXTERN int    pclose    __PROTO((FILE *));
  176. __EXTERN FILE *    popen    __PROTO((const char *, const char *));
  177. __EXTERN void    setlinebuf    __PROTO((FILE *));
  178.                               
  179.  
  180. __EXTERN void    _binmode    __PROTO((int));        /* ++jrb */
  181. __EXTERN long     getl    __PROTO((FILE *));
  182. __EXTERN long     putl    __PROTO((long, FILE *));
  183. __EXTERN short     getw    __PROTO((FILE *));
  184. __EXTERN short     putw    __PROTO((short, FILE *));
  185. __EXTERN void    _getbuf    __PROTO((FILE *fp));
  186. # endif /* _POSIX_SOURCE */
  187.  
  188. #endif /* __STRICT_ANSI__ */
  189.  
  190.  
  191. /* aliases */
  192.  
  193. __EXTERN int    _filbuf    __PROTO((FILE *));    /* needed for getc */
  194.  
  195. #ifdef __GNUC_INLINE__
  196. #define getc(__fp) \
  197. ({   int __c; \
  198.      typedef _tfp = (__fp); \
  199.      _tfp __lfp = (__fp); \
  200.     do { \
  201.     __c = (--__lfp->_cnt >= 0) ? ((int)*__lfp->_ptr++) : _filbuf(__lfp); \
  202.     } while ((!(__lfp->_flag & _IOBIN)) && (__c == '\r')); \
  203.     __c; \
  204. })
  205. #else
  206. #define    getc(fp)        fgetc(fp)
  207. #endif
  208.  
  209. #define    ungetc            fungetc
  210. #define    putc            fputc
  211. #define    getchar()        getc(stdin)
  212. #define    ungetchar(c)        fungetc((c),stdin)
  213. #define    putchar(c)        fputc((c),stdout)
  214.  
  215. #ifdef __cplusplus
  216. }
  217. #endif
  218.  
  219. #endif /* _STDIO_H */
  220.